home *** CD-ROM | disk | FTP | other *** search
/ Aminet 12 / Aminet 12 (1996)(GTI - Schatztruhe)[!][Jun 1996].iso / Aminet / dev / misc / BST_SystemDocs.lha / BeastV1 / Templates / C / BST_EmptyClass.c next >
Encoding:
C/C++ Source or Header  |  1996-03-31  |  6.2 KB  |  245 lines

  1. /****h* Beast/BST_EmptyClass.c [1.0] ********
  2. *
  3. *    NAME
  4. *      BST_EmptyClass --
  5. *
  6. *    COPYRIGHT
  7. *      Maverick Software Development
  8. *
  9. *    AUTHOR
  10. *      Jacco van Weert
  11. *
  12. *    CREATION DATE
  13. *      14-Feb-96
  14. *
  15. *    MODIFICATION HISTORY
  16. *
  17. ******************************************
  18. */
  19.  
  20. #include <BEAST:Include/proto/beast.h>
  21. #include <proto/exec.h>
  22. #include <utility/tagitem.h>
  23.  
  24. /**************************
  25.  **** structure definitions
  26.  ****/
  27. #define BST_EmptyCLASS_NAME "BST_EmptyClass" 
  28.  
  29. /***************************
  30.  **** The instance structure
  31.  ****/
  32. struct BST_EmptyInstance
  33. {
  34. #include <BEAST:Instances/BST_System/C/BST_EmptyClass.instance>
  35. };
  36.  
  37. extern struct Library *BeastBase, *SysBase;
  38. extern char             idString[], ClassName[];
  39.  
  40. #ifdef __SAS__
  41. ULONG __asm Init_Class(void);
  42. ULONG __asm Exit_Class(void);
  43. #else
  44. ULONG Init_Class(void);
  45. ULONG Exit_Class(void);
  46. #endif
  47.  
  48.     /**** These methods are defined as example... they are not needed ****/
  49. rfcall (mth_Init,    BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList);
  50. rfcall (mth_Dispose, BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList);
  51. rfcall (mth_GetAttr, BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList);
  52. rfcall (mth_SetAttr, BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList);
  53.  
  54.     /**** The name of the library ****/
  55. char idString[]  = "BST_EmptyClass  ("__DATE__")\n\r\0";
  56.     /**** The name of the class as defined in my_class.h ****/
  57. char ClassName[] = BST_EmptyCLASS_NAME ;
  58.  
  59. struct BST_Class *BST_EmptyClass;
  60.  
  61.     /**** The SetAttr procedure is used by the OBM_Init and OBM_SetAttr method ****/
  62. ULONG SetAttr( BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList );
  63.  
  64.  
  65. /****** BST_EmptyClass/Init_Class [1.0]
  66. *
  67. *    NAME
  68. *      Init_Class
  69. *
  70. **********************************
  71. */
  72. #ifdef __SAS__
  73. ULONG __asm Init_Class(void)
  74. #else
  75. ULONG Init_Class(void)
  76. #endif
  77. {
  78.   /*******************************************************************
  79.    **** Define class.... use BST_MakeSubClass if there is a superclass
  80.    ****/
  81.   BST_EmptyClass = BST_MakeClass( ClassName, sizeof(struct BST_EmptyInstance ));
  82.   CLSS_AddMethod( BST_EmptyClass, (ULONG *)&mth_Init,    OBM_INIT    );
  83.   CLSS_AddMethod( BST_EmptyClass, (ULONG *)&mth_Dispose, OBM_DISPOSE );
  84.   CLSS_AddMethod( BST_EmptyClass, (ULONG *)&mth_GetAttr, OBM_GETATTR );
  85.   CLSS_AddMethod( BST_EmptyClass, (ULONG *)&mth_SetAttr, OBM_SETATTR );
  86.   BST_AddClass(   BST_EmptyClass );
  87.  
  88.   return( 0 );
  89. }
  90.  
  91. /****** BST_EmptyClass/Exit_Class [1.0]
  92. *
  93. *    NAME
  94. *      Exit_Class
  95. *
  96. ***********************************
  97. */
  98. #ifdef __SAS__
  99. ULONG __asm Exit_Class(void)
  100. #else
  101. ULONG Exit_Class(void)
  102. #endif
  103. {
  104.   BST_RemoveClass( BST_EmptyClass );
  105.   BST_FreeClass(   BST_EmptyClass );
  106.   return( 0 );
  107. }
  108.  
  109. /****** BST_EmptyClass/SetAttr [1.0]
  110. *
  111. *    NAME
  112. *      SetAttr
  113. *
  114. ********************************************
  115. */
  116. ULONG SetAttr( BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList )
  117. {
  118.   struct BST_EmptyInstance *EI = Macro_GetInstance;
  119.   struct TagItem        *cur_ti, 
  120.                  *numberof_ti = NULL;
  121.   ULONG              the_tag,
  122.                   nr_attr = 0xFFFFFFFF;
  123.  
  124.   /*******************************
  125.    **** Check for the BTA_NumberOf
  126.    ****/
  127.   if (numberof_ti = BST_FindTagItem( BTA_NumberOf, TagList ))
  128.       {    nr_attr = numberof_ti->ti_Data; }
  129.  
  130.  
  131.   /************************
  132.    **** Set every attribute
  133.    ****/
  134.   for (cur_ti = TagList; ( cur_ti->ti_Tag != TAG_DONE ) &
  135.                ( nr_attr >  0  )       ; cur_ti = BST_NextTagItem( cur_ti ))
  136.     {
  137.       the_tag         = cur_ti->ti_Tag;
  138.       cur_ti->ti_Tag |= BTF_Ignore;
  139.       nr_attr--;
  140.       switch( the_tag )
  141.         {
  142.       case BTA_Title: EI->Title = (char *)cur_ti->ti_Data;  break;
  143.           default     : nr_attr++;
  144.                     cur_ti->ti_Tag  &= ~BTF_Ignore; break;
  145.         }
  146.     }
  147.  
  148.   /****************************************************
  149.    **** Reset the MethodFlags if all attributes are set
  150.    ****/
  151.   if (  numberof_ti )
  152.     if (!(numberof_ti->ti_Data = nr_attr))
  153.     MethodFlags &= ~( MTHF_DOPARENTS | MTHF_DOCHILDREN | MTHF_PASSTOCHILD );
  154.  
  155.   return( MethodFlags );
  156. }
  157.  
  158. /****** BST_EmptyClass/mth_Init [1.0]
  159. *
  160. *    NAME
  161. *      mth_Init
  162. *
  163. **************************************************
  164. */
  165. rfcall (mth_Init, BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList)
  166. {
  167.   return SetAttr( MethodFlags, Object, TagList );
  168. }
  169.  
  170. /****** BST_EmptyClass/mth_Dispose [1.0]
  171. *
  172. *    NAME
  173. *      mth_Dispose
  174. *
  175. *****************************************************
  176. */
  177. rfcall (mth_Dispose, BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList)
  178. {
  179.   return MethodFlags;
  180. }
  181.  
  182.  
  183. /****** BST_EmptyClass/mth_SetAttr [1.0]
  184. *
  185. *    NAME
  186. *      mth_SetAttr
  187. *
  188. *****************************************************
  189. */
  190. rfcall (mth_SetAttr, BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList)
  191. {
  192.   return SetAttr( MethodFlags, Object, TagList );
  193. }
  194.  
  195.  
  196. /****** BST_EmptyClass/mth_GetAttr [1.0]
  197. *
  198. *    NAME
  199. *      mth_GetAttr( MethodFlags, Object, Taglist )
  200. *
  201. *****************************************************
  202. */
  203. rfcall( mth_GetAttr, BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList)
  204. {
  205.   struct BST_EmptyInstance *EI = Macro_GetInstance;
  206.   struct TagItem        *cur_ti, 
  207.                  *numberof_ti = NULL;
  208.   ULONG              the_tag,
  209.                   nr_attr = 0xFFFFFFFF;
  210.  
  211.   /*******************************
  212.    **** Check for the BTA_NumberOf
  213.    ****/
  214.   if (numberof_ti = BST_FindTagItem( BTA_NumberOf, TagList ))
  215.       {    nr_attr = numberof_ti->ti_Data; }
  216.  
  217.  
  218.   /************************
  219.    **** Get every attribute
  220.    ****/
  221.   for (cur_ti = TagList; ( cur_ti->ti_Tag != TAG_DONE ) &
  222.                ( nr_attr >  0  )       ; cur_ti = BST_NextTagItem( cur_ti ))
  223.     {
  224.       the_tag         = cur_ti->ti_Tag;
  225.       cur_ti->ti_Tag |= BTF_Ignore;
  226.       nr_attr--;
  227.       switch( the_tag )
  228.         {
  229.       case BTA_Title: cur_ti->ti_Data = EI->Title;  break;
  230.           default     : nr_attr++;
  231.                     cur_ti->ti_Tag  &= ~BTF_Ignore; break;
  232.         }
  233.     }
  234.  
  235.   /****************************************************
  236.    **** Reset the MethodFlags if all attributes are set
  237.    ****/
  238.   if (  numberof_ti )
  239.     if (!(numberof_ti->ti_Data = nr_attr))
  240.     MethodFlags &= ~( MTHF_DOPARENTS | MTHF_DOCHILDREN | MTHF_PASSTOCHILD );
  241.  
  242.   return( MethodFlags );
  243.  
  244. }
  245.